package com.lemobar.pay.enums;

import com.lemobar.pay.exception.LmbPayException;

import static com.lemobar.pay.enums.LmbPayPlatformEnum.*;

/**
 * 支付方式
 * 微信平台：JSAPI支付、小程序支付、APP支付、付款码支付...
 * 支付宝平台：手机网站WAP支付、 当面付(付款码支付)BAR_CODE支付、APP支付
 * 双乾平台：双乾微信、双乾支付宝
 *
 * 微信 -> https://pay.weixin.qq.com/wiki/doc/api/index.html
 * 支付宝 -> https://opendocs.alipay.com/open/01zuoj
 *
 */
public enum LmbPayTypeEnum {


    ALIPAY_H5("alipay_h5", ALIPAY, "支付宝统一下单(h5)"), // 统一支付  alipay.trade.create   不要用

    ALIPAY_WAP("alipay_wap", ALIPAY, "支付宝wap"), // 支付宝 wap  alipay.trade.wap.pay(手机网站支付接口2.0)

    ALIPAY_BARCODE("alipay_barcode", ALIPAY, "支付宝统一收单交易支付接口(付款码)"),      //  面对面-付款码 alipay.trade.pay

    ALIPAY_APP("alipay_app", ALIPAY, "支付宝app"), // alipay.trade.app.pay(app支付接口2.0)


    ALIPAY_PC("alipay_pc", ALIPAY, "支付宝pc"),    // alipay.trade.page.pay
    ALIPAY_QRCODE("alipay_precreate", ALIPAY, "支付宝统一收单线下交易预创建"),





    WXPAY_JSAPI("JSAPI", WXPAY, "微信JSAPI支付"), // 微信公众号用JSAPI支付      // code => 微信支付类型(trade_type) JSAPI

    WXPAY_MINI("JSAPI", WXPAY, "微信小程序支付"),                               // code => 微信支付类型(trade_type) JSAPI

    WXPAY_APP("APP", WXPAY, "微信APP支付"),                                     // code => 微信支付类型(trade_type) JSAPI

    WXPAY_MICRO("MICRO", WXPAY, "微信付款码支付"),

    WXPAY_MWEB("MWEB", WXPAY, "微信H5支付"),
    WXPAY_NATIVE("NATIVE", WXPAY, "微信Native支付"),



    EPAY_WXZF("WXZF", EPAY, "微信公众号/小程序"),           // code => 双乾支付类型 WXZF

    EPAY_ZFBZF("ZFBZF", EPAY, "支付宝服务窗"),             // code => 双乾支付类型 ZFBZF






    ;

    /**
     * 微信-交易类型 trade_type
     */
    private String code;

    private LmbPayPlatformEnum platform;

    private String desc;

    LmbPayTypeEnum(String code, LmbPayPlatformEnum platform, String desc) {
        this.code = code;
        this.platform = platform;
        this.desc = desc;
    }

    public String getCode() {
        return code;
    }

    public LmbPayPlatformEnum getPlatform() {
        return platform;
    }

    public String getDesc() {
        return desc;
    }

    public static LmbPayTypeEnum getByName(String name) {
        for (LmbPayTypeEnum lmbPayTypeEnum : LmbPayTypeEnum.values()) {
            if (lmbPayTypeEnum.name().equalsIgnoreCase(name)) {
                return lmbPayTypeEnum;
            }
        }
        throw new LmbPayException(LmbPayExResultEnum.PAY_TYPE_ERROR);
    }
}
